<?php
namespace Model;

require_once 'Model.php';

use Model\Model;

class AnnonceAttribut extends Model {  
    private $table = 'annonce_attribut';
    
    /**
     * Retourne l'id_annonce et l'id_attribut
     * @param string $value : Valeur dont on veut récupérer l'annonce et l'attribut
     * @return objet $return
     */
    public function getAnnonceAttributByValue($value) {
        $query = 'SELECT id_annonce, id_attribut'
                . ' FROM '.$this->table
                . ' WHERE value = "'.$value.'"';
        $select = $this->db->prepare($query);
        $select->setFetchMode(\PDO::FETCH_OBJ);
        try {
            $select->execute();
            $result = $select->fetchAll();
            return $result;
        } catch (Exception $ex) {
            echo 'Erreur de requète : ', $ex->getMessage();
        }
    }
    
    /**
     * Retourne toutes les valeurs d'un attribut pour toutes les annonces existantes
     * @param int $id_attribut : Id de l'attribut dont on veut récupérer les valeurs
     * @return objet $result
     */
    public function getAttributValues($id_attribut) {
        $id_attribut = (int) $id_attribut;
        $query = 'SELECT value'
                . ' FROM '.$this->table
                . ' WHERE id_attribut = '.$id_attribut;
        $select = $this->db->prepare($query);
        $select->setFetchMode(\PDO::FETCH_OBJ);
        try {
            $select->execute();
            $result = $select->fetchAll();
            return $result;
        } catch (Exception $ex) {
            echo 'Erreur de requète : ', $ex->getMessage();
        }
    }
    
    /**
     * Retourne la valeur d'un attribut d'une annonce
     * @param int $id_annonce : Id de l'annonce
     * @param int $id_attribut : Id de l'attribut
     * @return objet $result
     */
    public function getAnnonceAttribut($id_annonce, $id_attribut) {
        $id_annonce = (int) $id_annonce;
        $id_attribut = (int) $id_attribut;
        $query = 'SELECT value'
                . ' FROM '.$this->table
                . ' WHERE id_annonce = '.$id_annonce.' AND id_attribut = '.$id_attribut;
        $select = $this->db->prepare($query);
        $select->setFetchMode(\PDO::FETCH_OBJ);
        try {
            $select->execute();
            $result = $select->fetch();
            return $result;
        } catch (Exception $ex) {
            echo 'Erreur de requète : ', $ex->getMessage();
        }
    }
    /**
     * Enregistre la valeur d'un attribut d'une annonce
     * @param array $data : Données à enregistrer dans la table
     */
    public function saveAnnonceAttribut($data) {
        $value = $this->getAnnonceAttribut($data['id_annonce'], $data['id_attribut']);
        if(!$value) {
            $query = 'INSERT INTO '.$this->table.' VALUES ('
                    . ' "",'
                    . ' :id_annonce,'
                    . ' :id_attribut,'
                    . ' :value)';
            $insert = $this->db->prepare($query);
            try {
                $insert->execute($data);
            } catch (Exception $ex) {
                echo 'Erreur de requète : ', $ex->getMessage();
            }
        } else {
            $query = 'UPDATE '.$this->table.' SET'
                    . ' id_annonce = :id_annonce,'
                    . ' id_attribut = :id_attribut,'
                    . ' value = :value'
                    . ' WHERE id_annonce = :id_annonce AND id_attribut = :id_attribut';
            $update = $this->db->prepare($query);
            try {
                $update->execute($data);
            } catch (Exception $ex) {
                echo 'Erreur de requète : ', $ex->getMessage();
            }
        }
    }
    
    /**
     * Supprime une valeur d'attribut depuis une annonce ou depuis un attribut
     * @param int $idby : Id de l'annonce ou de l'attribut
     * @param string $by : Texte spécifiant si la suppression se fait à partir de l'annonce ou de l'attribut
     */
    public function deleteAnnonceAttribut($id_by, $by="annonce") {
        $id_by = (int) $id_by;
        if($by == "annonce") {
            $query = 'DELETE '
                    . ' FROM '.$this->table
                    . ' WHERE id_annonce = '.$id_by;
        } elseif($by == "attribut") {
            $query = 'DELETE '
                    . ' FROM '.$this->table
                    . ' WHERE id_attribut = '.$id_by;
        }
        try {
            $this->db->exec($query);
        } catch (Exception $ex) {
            echo 'Erreur de requète : ', $ex->getMessage();
        }
    }
}